program principal
interface

function LeerFichero(x,w)result(n)
	real(kind=8),dimension(:),allocatable::x,w
	integer::n
end function


function datos()result(num)
	integer::num
end function

subroutine calculo(x,w,dimen,pto)
	real(kind=8),dimension(:),allocatable::x,w
	real(kind=8),dimension(:,:),allocatable::matriz
	real(kind=8)::pto
	integer::dimen
end subroutine

end interface

	real(kind=8),dimension(:),allocatable::x,w
	integer::dimen,num,i
	real(kind=8)::pto
	dimen=LeerFichero(x,w)
	num=datos()

	do i=1,num,1
		print*,'punto?'
		read(5,'(f19.14)')pto
		call calculo(x,w,dimen,pto)
	end do
end program


function LeerFichero(x,w)result(n)
	real(kind=8),dimension(:),allocatable::x,w
	integer::n
	open(unit=1, file='datos.dat',status='unknown')
	read(1,*)n
	allocate(x(0:n))
	allocate(w(0:n))
	read(1,*)x
	read(1,*)w
	close(1)
end function

function datos()result(num)
	integer::num

	print*,'¿cuantos puntos desea evaluar?'
	read(5,'(i3)')num
end function

subroutine calculo(x,w,dimen,pto)
	real(kind=8),dimension(:),allocatable::x,w
	real(kind=8),dimension(:,:),allocatable::matriz
	real(kind=8)::pto
	integer::dimen,fila,columna
	allocate(matriz(0:dimen,0:dimen))
	matriz=0
	matriz(0:dimen,0)=w
	do columna=1,dimen,1
		do fila=0,dimen-columna,1
			matriz(fila,columna)=(matriz(fila+1,columna-1)-matriz(fila,columna-1))/(x(fila+columna)-x(fila))
		end do
	end do
	print*,matriz(0,0)
	print*,matriz(0,1)
	print*,matriz(0,2)	
	print*,matriz(0,3)

	open(unit=2, file='Lagrange.dat',status='unknown')
	do i=0,dimen,1
		write(2,'(f19.14)')matriz(i,0:dimen)
	end do
	close(2)
end subroutine



